package proyecto.quiniela;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

import proyecto.tools.AlertProgressBar;

import quinielas.LeeQuinielas;
import quinielas.Quiniela;
import temporadas.Partido;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.Toast;


public class Quini_Estadistica extends Activity  {
    /** Called when the activity is first created. */
	
	private String fechaQuiniela = "";
	private LinkedHashMap<Partido, String> m;
	
	//manejador para la barra de carga
	private Handler manejador;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.quiniela_estadistica);
                
        manejador = new Handler();
        
        //Recogemos los widgets de la interfaz
        final ImageButton guarda = (ImageButton)findViewById(R.id.guarda_imgButton);
        
        
        //este es el proceso de rellenado de quiniela
        //LinkedHashMap<Partido, String> m;
		try {
			AlertProgressBar.show(this);
			new Thread(){
				
				public void run(){
					try {
						m = Quini_Estadistica.this.consultaPartidos();
					} catch (Exception e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}	
					manejador.post(new Runnable() {
						@Override
						public void run() {
							// TODO Auto-generated method stub
							try {
								
								Quini_Estadistica.this.rellenaQuiniela(m);
								AlertProgressBar.dismiss();
								
							} catch (Exception e) {
								// TODO Auto-generated catch block
								e.printStackTrace();
							}
						}
					});
				}
			}.start();
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		
		
		
		
		
		//configuramos el evento onClick de los botones
		 guarda.setOnClickListener(new OnClickListener() {
				
				public void onClick(View v) {
					
					TableLayout t = (TableLayout)findViewById(R.id.contenedorQuiniela);
					
					  try {
						  FileWriter f = new FileWriter("/sdcard/miquiniela.txt");
		                    //escribe = new PrintWriter(f);
		                    for (int i = 0; i < t.getChildCount(); i++) {
		                       
		                        View table = t.getChildAt(i);
		                        if(table.equals(table.findViewById(R.id.partido))){
		                                                   
		                            final TextView eqVisit = (TextView)table.findViewById(R.id.eqFuera);
		                            f.write(eqVisit.getText().toString());
		                            f.write(',');
		                            final TextView eqLocal = (TextView)table.findViewById(R.id.eqCasa);
		                            f.write(eqLocal.getText().toString());
		                            f.write(',');
		                                           
		                            //Creamos la variables para el control de tachados
		                            FrameLayout fl1 = (FrameLayout)table.findViewById(R.id.uno);
		                            FrameLayout flX = (FrameLayout)table.findViewById(R.id.equis);
		                            FrameLayout fl2 = (FrameLayout)table.findViewById(R.id.dos);
		                           
		                            if(fl1.findViewById(R.id.tachado).isShown()){
		                            	 f.write('1');
		                            }
		                            
		                            if(flX.findViewById(R.id.tachado).isShown()){
		                            	 f.write('X');
		                            	 
		                            }
		                            if(fl2.findViewById(R.id.tachado).isShown()){
		                            	 f.write('2');
		                            	 
		                            }
		                            f.write("\n");               
		                        }
		                       
		                    }
		                    f.close();
		                    
		                    Toast.makeText(v.getContext(), "PRONÓSTICOS GUARDADOS", Toast.LENGTH_SHORT).show();
		                   
		                } catch (FileNotFoundException e) {
		                    e.printStackTrace();
		                } catch (IOException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
		                   
		               
		            }           
		           
		           
		                           
		            }
		    );
               
    }
	    
   public LinkedHashMap<Partido, String> consultaPartidos() throws Exception{
		
    	LeeQuinielas siguienteQuiniela;
		List<Partido> lp;
		Set<String>eqImportantes=new HashSet<String>();
		eqImportantes.add("INGLATERRA");eqImportantes.add("PORTUGAL");eqImportantes.add("ESPAÑA");
		eqImportantes.add("FRANCIA");eqImportantes.add("ITALIA");eqImportantes.add("ALEMANIA");
		eqImportantes.add("BRASIL");eqImportantes.add("ARGENTINA");eqImportantes.add("HOLANDA");
				
		siguienteQuiniela = new LeeQuinielas("proxima");//leer los partidos de la web
	    lp= siguienteQuiniela.getLp();//obtener dicha lista
	       
	    Quiniela q = new Quiniela(lp,siguienteQuiniela.getNumJ());//creo la nueva quiniela pasando por parametro lp
	    
	    //insertamos la fecha de la quiniela en el mvl
	    //final TextView fecha = (TextView)findViewById(R.id.fecha_TextView);
		//fecha.setText(siguienteQuiniela.getNumJ());
	    fechaQuiniela = siguienteQuiniela.getNumJ();
	    
	    String entrada;
	    String [] resRandom= {"1","1","X","X","2","2"};
	    Random rnd= new Random();
	    
	    LinkedHashMap<Partido,String> pronosticoQuiniela = new LinkedHashMap<Partido, String>();    
        for(Partido p:q.getPq()){
        	
        	InputStream lector = getAssets().open("std.txt");    	     	        	    	
        	BufferedReader bf = new BufferedReader(new InputStreamReader(lector)); 
        	
        	boolean nohay=true;
			boolean noSalir=true;
			   
			while((entrada=bf.readLine())!=null && noSalir){
				//String equipoL=entrada.replaceAll(" -> ","");
				//Log.d(tag , "-->"+equipo+"<--");
				//entrada seria lo mismo que equipoL
				
				if (entrada.compareToIgnoreCase("LOC: "+p.geteCasa())==0){
				
					while(!(entrada=bf.readLine()).startsWith("LOC: ")&& noSalir){
						String equipoV=entrada.replaceAll(" -> ", "");
						if (equipoV.toLowerCase().contains(p.geteVisitante().toLowerCase())){
								int index=equipoV.length();
								if((equipoV.charAt(index-1)+"")=="") 
									pronosticoQuiniela.put(p,"1");
								else{
									String resul= equipoV.charAt(index-1)+"";
									pronosticoQuiniela.put(p,resul.toUpperCase());
								}
								nohay=false;
								noSalir=false;
								
						}
					}
				}
			}
		//esto quiere decir que no hemos podido meter un partido en mapa xq no tenemos estadisticas
		//tambien modifica el pronostico dependiendo si es un equipo fuerte (Internacionales)	
			if(nohay){
				if((eqImportantes.contains(p.geteCasa()))&& (!eqImportantes.contains(p.geteVisitante())))
					pronosticoQuiniela.put(p,"1");
				else if((eqImportantes.contains(p.geteVisitante()))&& (!eqImportantes.contains(p.geteCasa())))
					pronosticoQuiniela.put(p,"2");
				else{
					
					
					String aleatorio=resRandom[rnd.nextInt(6)];
					pronosticoQuiniela.put(p,aleatorio);
				}
					
								
				}
		}
        
		return pronosticoQuiniela;
	}
    
    
    
    
    @SuppressWarnings("unchecked")
	public void rellenaQuiniela(LinkedHashMap<Partido,String> m) throws Exception{
    	    	
    	Iterator<?> it = m.entrySet().iterator();
    	
    	TableLayout t = (TableLayout)findViewById(R.id.contenedorQuiniela);
		
    	
    	final TextView fecha = (TextView)findViewById(R.id.fecha_TextView);
		fecha.setText(fechaQuiniela);
		
		for (int i = 0; i < t.getChildCount(); i++) {
			
			//Map.Entry<Partido,String> e = (Map.Entry<Partido,String>)it.next();
			
			//TableRow table = (TableRow)t.getChildAt(i);
			View table = t.getChildAt(i);
			if(table.equals(table.findViewById(R.id.partido))){
				Map.Entry<Partido,String> e = (Map.Entry<Partido,String>)it.next();
				
				if(e.getValue().equals("1")){
					ImageView pronostico = (ImageView) table.findViewById(R.id.ImageViewUno);
					pronostico.setImageResource(R.drawable.focus);
					
				}else if(e.getValue().equals("X")){
					ImageView pronostico = (ImageView) table.findViewById(R.id.ImageViewEquis);
					pronostico.setImageResource(R.drawable.focus);
					
				}else if(e.getValue().equals("2")){
					ImageView pronostico = (ImageView) table.findViewById(R.id.ImageViewDos);
					pronostico.setImageResource(R.drawable.focus);
				}
			
				
				final TextView eqVisit = (TextView)table.findViewById(R.id.eqFuera);
				eqVisit.setText(e.getKey().geteVisitante().toLowerCase());
				final TextView eqLocal = (TextView)table.findViewById(R.id.eqCasa);
				eqLocal.setText(e.getKey().geteCasa().toLowerCase());
			
			
				//Aquí controlamos los tachados
				FrameLayout fl1 = (FrameLayout)table.findViewById(R.id.uno);
				FrameLayout flX = (FrameLayout)table.findViewById(R.id.equis);
				FrameLayout fl2 = (FrameLayout)table.findViewById(R.id.dos);
				
				List<FrameLayout> listaIMv = new ArrayList<FrameLayout>();
				listaIMv.add(fl1);
				listaIMv.add(flX);
				listaIMv.add(fl2);
				
				fl1.setOnClickListener(new MiOnClickListener(listaIMv));
				fl1.setClickable(true);
				flX.setOnClickListener(new MiOnClickListener(listaIMv));
				flX.setClickable(true);
				fl2.setOnClickListener(new MiOnClickListener(listaIMv));
				fl2.setClickable(true);
			}
			
		}
				
    	
    }
    
    
    private class MiOnClickListener implements OnClickListener{

    	private List<FrameLayout> listaIMv;
		private String tag = "MiOnClickListener";
		

		public MiOnClickListener(List<FrameLayout> listaIMv) {
			super();
			this.listaIMv = listaIMv;
		}


		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			FrameLayout fl = (FrameLayout)v;
			Log.d(tag , "*******************view = "+listaIMv.size());
			for (FrameLayout flLista : listaIMv) {
				if(flLista.equals(fl)){
					flLista.findViewById(R.id.tachado).setVisibility(View.VISIBLE);
					
				}
				else{
					flLista.findViewById(R.id.tachado).setVisibility(View.INVISIBLE);
				}
			}
		}
    	
    	
    }
    
}